home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / Sources / FWIdle.cpp < prev    next >
Encoding:
Text File  |  1996-08-16  |  5.0 KB  |  184 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWIdle.cpp
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWIDLE_H
  13. #include "FWIdle.h"
  14. #endif
  15.  
  16. #ifndef FWPART_H
  17. #include "FWPart.h"
  18. #endif
  19.  
  20. #ifndef FWFRAME_H
  21. #include "FWFrame.h"
  22. #endif
  23.  
  24. #ifndef FWPRIDEB_H
  25. #include "FWPriDeb.h"
  26. #endif
  27.  
  28. // ----- OpenDoc Includes -----
  29.  
  30. #ifndef SOM_ODSession_xh
  31. #include <ODSessn.xh>
  32. #endif
  33.  
  34. #ifndef SOM_ODDispatcher_xh
  35. #include <Disptch.xh>
  36. #endif
  37.  
  38. #if defined(__MWERKS__) && GENERATING68K
  39. // A hack to work around a bug
  40. #pragma import list somGetGlobalEnvironment
  41. #endif
  42.  
  43. //========================================================================================
  44. // RunTime Info
  45. //========================================================================================
  46.  
  47. #ifdef FW_BUILD_MAC
  48. #pragma segment fwpart2
  49. #endif
  50.  
  51. FW_DEFINE_AUTO(FW_CIdler)
  52.  
  53. //========================================================================================
  54. // class FW_CIdler
  55. //========================================================================================
  56.  
  57. //----------------------------------------------------------------------------------------
  58. //    FW_CIdler::FW_CIdler
  59. //----------------------------------------------------------------------------------------
  60.  
  61. FW_CIdler::FW_CIdler(FW_CPart* part, ODIdleFrequency frequency) :
  62.     fPart(part),
  63.     fFrame(NULL),
  64.     fRegistered(FALSE),
  65.     fFrequency(frequency)
  66. {
  67. }
  68.  
  69. //----------------------------------------------------------------------------------------
  70. //    FW_CIdler::FW_CIdler
  71. //----------------------------------------------------------------------------------------
  72.  
  73. FW_CIdler::FW_CIdler(FW_CFrame* frame, ODIdleFrequency frequency) :
  74.     fPart(frame->fPart),
  75.     fFrame(frame),
  76.     fRegistered(FALSE),
  77.     fFrequency(frequency)
  78. {
  79. }
  80.  
  81. //----------------------------------------------------------------------------------------
  82. //    FW_CIdler::~FW_CIdler
  83. //----------------------------------------------------------------------------------------
  84.  
  85. FW_CIdler::~FW_CIdler()
  86. {
  87.     if (fRegistered)
  88.         UnregisterIdle(somGetGlobalEnvironment());
  89. }
  90.  
  91. //----------------------------------------------------------------------------------------
  92. //    FW_CIdler::SetIdleFrequency
  93. //----------------------------------------------------------------------------------------
  94.  
  95. void FW_CIdler::SetIdleFrequency(Environment *ev, ODIdleFrequency frequency)
  96. {
  97.     fFrequency = frequency;
  98.     
  99.     if (fRegistered)
  100.         PrivGetDispatcher(ev)->SetIdleFrequency(ev, fPart->GetODPart(ev), PrivGetRegisteredFrame(ev), fFrequency);
  101. }
  102.  
  103. //----------------------------------------------------------------------------------------
  104. //    FW_CIdler::PrivGetDispatcher
  105. //----------------------------------------------------------------------------------------
  106.  
  107. ODDispatcher* FW_CIdler::PrivGetDispatcher(Environment *ev) const
  108. {
  109.     return fPart->GetSession(ev)->GetDispatcher(ev);
  110. }
  111.  
  112. //----------------------------------------------------------------------------------------
  113. //    FW_CIdler::PrivGetRegisteredFrame
  114. //----------------------------------------------------------------------------------------
  115.  
  116. ODFrame* FW_CIdler::PrivGetRegisteredFrame(Environment *ev) const
  117. {
  118.     return fFrame != NULL ? fFrame->GetODFrame(ev) : NULL;
  119. }
  120.  
  121. //----------------------------------------------------------------------------------------
  122. //    FW_CIdler::RegisterIdle
  123. //----------------------------------------------------------------------------------------
  124.  
  125. void FW_CIdler::RegisterIdle(Environment *ev, FW_Boolean state)
  126. {
  127.     if (state)
  128.         RegisterIdle(ev);
  129.     else
  130.         UnregisterIdle(ev);
  131. }
  132.  
  133. //----------------------------------------------------------------------------------------
  134. //    FW_CIdler::RegisterIdle
  135. //----------------------------------------------------------------------------------------
  136.  
  137. void FW_CIdler::RegisterIdle(Environment *ev)
  138. {
  139.     if (!fRegistered)
  140.     {
  141.         if (fFrame)
  142.         {
  143.             if (fFrame->fIdler != NULL)
  144.                 fFrame->fIdler->UnregisterIdle(ev);
  145.         }
  146.         else
  147.         {
  148.             if (fPart->fIdler != NULL)
  149.                 fPart->fIdler->UnregisterIdle(ev);
  150.         }
  151.  
  152.         PrivGetDispatcher(ev)->RegisterIdle(ev, fPart->GetODPart(ev), PrivGetRegisteredFrame(ev), fFrequency);
  153.         fRegistered = TRUE;
  154.         fPart->PrivCountIdleRegistering(TRUE);
  155.         
  156.         if (fFrame)
  157.             fFrame->fIdler = this;
  158.         else
  159.             fPart->fIdler = this;
  160.     }
  161. }
  162.  
  163. //----------------------------------------------------------------------------------------
  164. //    FW_CIdler::UnregisterIdle
  165. //----------------------------------------------------------------------------------------
  166.  
  167. void FW_CIdler::UnregisterIdle(Environment *ev)
  168. {
  169.     if (fRegistered)
  170.     {
  171.         FW_ASSERT(fFrame ? fFrame->fIdler != NULL : fPart->fIdler != NULL);
  172.  
  173.         fRegistered = FALSE;
  174.         fPart->PrivCountIdleRegistering(FALSE);
  175.         
  176.         if (fFrame)
  177.             fFrame->fIdler = NULL;
  178.         else
  179.             fPart->fIdler = NULL;        
  180.  
  181.         PrivGetDispatcher(ev)->UnregisterIdle(ev, fPart->GetODPart(ev), PrivGetRegisteredFrame(ev));
  182.     }
  183. }
  184.